Skip to content

Linux

Linux 文件系统

Linux目录结构

  • /bin (Binary):存放计算机能直接运行的常用的二进制命令
  • /sbin:存放系统管理原命令,普通用户通常没有执行权限
  • /etc:存放所有的系统配置文件
  • /root:系统管理员的家目录
  • /home:普通用户的家目录
  • /opt(Optional):可选软件安装目录,通常用于安装第三方大型软件,放安装包的
  • /usr/local:给主机额外安装软件的目标目录,放实际软件的,一般是通过编译源码的方式安装的程序
  • /tmp:临时文件目录,系统重启或定期会清理
  • /var:存放经常变化的文件,/usr目录通常是只读的,系统运行需要很多长度变化的文件,该目录最重要的是/var/log 系统日志
  • /dev(device):设备文件目录,所有的硬件设备被抽象为文件,Linux“一切皆文件”,类似于设备管理器
  • /proc(process):虚拟目录,是系统内存的映射,访问这个目录来获取系统信息
  • /sys(system):系统内核相关
  • /srv(service):系统内核相关
  • /media:Linux自动识别设备,当识别后,Linux会把识别的设备挂载到该目录下
  • /mnt(mount):临时挂载目录,手动挂载
  • /lib:动态连接库,作用类似于Windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库
  • /lost+found:一般是空的,存放在系统崩溃、非正常关机或磁盘故障后,被修复程序找回但“无家可归”的文件碎片
  • /boot:存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
  • /selinux(security-enhanced linux):是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可以自行设置

文件颜色

  1. 白色/黑色:普通文件
  2. 蓝色:目录
  3. 浅蓝色:软链接
  4. 绿色:可执行文件,如 .sh 脚本或二进制程序
  5. 红色:压缩包或归档文件
  6. 黄色:设备文件,通常出现在/dev目录下
  7. 紫色:图片、视频或图形文件
  8. 红色背景:受损的链接(如果一个软链接指向的文件被删除了,它的名字通常会显示为红底白字或闪烁)
  9. 黄色背景:管道文件
  10. 绿色背景:全开放目录,权限为777且带有粘滞位(非文件所有者或root不能删除该文件)的目录,如/tmp,通常为绿底黑字

远程登录Linux

  1. XShell介绍
    • XShell是目前最好的远程登录到Linux系统的软件,流畅的速度并且完美解决了中文乱码的问题
    • XShell是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及Microsoft Windows平台的TELNET协议
    • XShell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的
  2. Xftp介绍
    • 是一个基于 Windows 平台的强大的SFTP、FTP文件传输文件
  3. 一般生产环境将服务器配置成静态IP

配置静态IP

  1. /etc/sysconfig/network-scripts/,修改ifcfg-ens33[具体文件看自己的虚拟网卡是哪个]该文件
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="cc535551-4caa-4bef-9498-6f138559d326"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.134.128
NETMASK=255.255.255.0
GATEWAY=192.168.134.2
DNS1=114.114.114.114
DNS2=8.8.8.8

将BOOTPROTO[引导协议]值设置为 static ,添加手动配置的IPADDR[静态IP地址]、NETMASK[子网掩码]、GATEWAY[网关]、DNS服务器等配置

  1. 重启网络服务:sudo systemctl restart network

  2. 查看IP地址是否正确

    ip addr

    测试DNS服务是否正常

    ping www.baidu.com

    测试网关

    ping 192.168.134.2

用户管理

基本用户管理

  1. 基本介绍:Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统

  2. 添加用户:

    • 基本语法:useradd [用户名]
    • 细节说明:创建用户成功后,会自动的创建和用户同名的Home目录,也可以通过useradd -d [指定目录] [新的用户名],给新创建的用户指定Home目录
  3. 指定/修改密码:

    • 基本语法:passwd [用户名]
    • 细节说明:如果不指定用户名就会修改当前用户的密码,一定要指定用户名!
  4. 删除用户

    • 基本语法:userdel [用户名]
    • 删除用户及家目录:userdel -r [用户名]
    • 细节说明:有两种删法,一种是只删除用户,保留家目录;另一种是用户和家目录都删除。一般情况下,建议保留家目录
  5. 查询用户信息

    • 基本语法:id [用户名]
    • 细节说明:当用户不存在时,返回无此用户
  6. 切换用户

    • 基本语法:su - [用户名]
    • 细节说明:
      • 从权限高的用户切换到权限低的用户,不需要输入密码,反之需要;当需要切换回原来的用户时,使用exit/logout命令
      • 关于-是否省略的问题,强烈不建议省略该符号。-的作用是:在切换用户的同时,初始化该用户的环境变量
  7. 查看当前登录用户的信息

    • 基本语法:whoami / who am i
    • 细节说明:who am i显示的是第一次登录该系统的用户,whoami显示的是当前的使用的用户

用户组管理

  1. 基本介绍:类似于角色,系统可以对有共性的多个用户进行统一管理
  2. 新增组
    • 基本语法:groupadd [组名]
  3. 删除组
    • 基本语法:groupdel [组名]
  4. 增加用户时直接加上组
    • 基本语法:useradd -g [用户组] [用户名]
    • 细节说明:如果在创建用户时没有指定组,则会创建一个和用户名同名的组,并将用户加入该组
  5. 修改用户所在组
    • 基本语法:usermod -g [用户组] [用户名] (modify)

用户和组相关文件

  • /etc/passwd 文件

    • 用户(user)的配置文件,记录用户的各种信息
    • 每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

    image-20260111185326513

  • /etc/shadow 文件

    • 存放加密后的口令(密码)

    • 每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

      image-20260111190245756

  • /etc/group 文件

    • 组(group)的配置文件,记录Linux包含的组的信息

    • 每行含义:组名:口令:组标识号:组内用户列表

      image-20260111190545701

运行级别

  1. 介绍:运行级别决定了系统启动后处于什么状态,开启哪些服务

  2. 传统的7个运行级别:

    级别名称功能描述
    0Halt关机
    1Single-user单用户模式,只有root权限,不加载网络,常用于找回密码
    2Multi-user多用户模式,无网络
    3Full Multi-user完全多用户模式,命令行模式,有网络
    4Unused保留
    5X11图形界面模式
    6Reboot重启

    常用的运行级别是3(多用户模式,有网络,但节省资源)和5(GUI)

  3. 运行级别命令

    • 切换运行级别:init [运行级别]
    • 查看当前运行级别:runlevel
    • 查看默认运行级别:systemctl get-default
    • 改变默认运行级别:systemctl set-default [.target]
      • 注意:CentOS 7之前,运行级别的文件在 /etc/inittab 中,CentOS 7之后,运行级别的文件变为 multi-user.target(级别3),graphical.target(级别5)

重置root密码

  1. 进入之前按 e 进入编辑模式
  2. 在Linux行尾加上init=/bin/sh,按Ctrl + x执行,进入单用户模式(提示系统这次启动不要按照正常流程运行init进程,拿到一个简单的sh(命令窗口))
  3. 输入 mount -o remount,rw / (重新挂载根目录,并赋予读写权限)
  4. 输入passwd,之后输入两次密码
  5. 接着输入touch /.autorelabel(在根目录下创建一个名为.autorelabel)的隐藏文件,应对SELinux的安全机制,防止因为修改/etc/shadow文件后,安全标签发生变化而被禁止登录
  6. 最后输入exec /sbin/init,等待即可(结束当前的sh进程,正式加载系统的各个服务)

Linux 组管理和权限管理

组管理

  1. 基本介绍:在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux文件中,有所有者、所在组、其他组的概念。

  2. 文件/目录的所有者

    • 查看文件/目录的所有者:ls -ahl ,各列分别为:权限、子目录数量(包括隐藏文件)、所有者、所属组、大小、最后修改时间、文件/目录名

      image-20260117094622654

    • 改变文件的所有者:chown 用户名 文件名 (change owner) , 加上-R会对目录的所有子目录和字文件生效

    • 同时改变文件的所有者和所在组:chown newowner:newgroup 文件/目录

  3. 文件/目录所在组

    • 当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组

    • 查看文件/目录所在组:ls -ahl 同上

    • 修改文件所在组:chgrp 组名 文件名 ,加上-R会对目录的所有子目录和字文件生效

  4. 其他组:除文件所有者和所在组的用户之外,系统的其他用户都是文件的其他组

  5. 改变用户所在组

    • usermod -g [组名] [用户名] 改变用户所在组
    • usermod -d [目录名] [用户名] 改变用户登录的 初始目录,该用户需要有目录的访问权限

权限管理

  1. 基本介绍

    drwxr-xr-x 共有10位,0-9位说明:

    • 第0位确定文件类型(d - l c b)

      l 是软链接,相当于windows的快捷方式

      d 是目录,相当于windows的文件夹

      c 是字符设备文件,串行端口设备,如鼠标,键盘,终端。按字符读取

      b 是块设备,存储数据的硬件,比如硬盘。按块读取

      - 是普通文件

    • 第1-3位是文件所有者对该文件拥有的权限

    • 第4-6位是文件所属组对该文件拥有的权限

    • 第7-9位是文件其他组对该文件拥有的权限

  2. 权限介绍

    权限缩写数字对文件 (File) 的意义对目录 (Directory) 的意义
    r4可以读取/查看文件内容可以 ls 查看目录下的文件名
    w2可以修改/保存文件内容可以在目录内新建/删除/重命名文件
    执行x1可以作为程序或脚本运行可以 cd 进入该目录,或访问其子项

​ 权限使用的数字和为2的整数次幂,如 0b111 代表拥有 rwx 权限,分别为2的0次幂 1,2的1次幂 2,2的2次幂 4

  • chmod (change mode)修改权限几种方式

    • 第一种方式:+ - = 变更权限

      • u :所有者

      • g:所有组

      • o:其他人

      • a:所有人(u,g,o的总和)

      • 案例演示

        • 给abc文件的所有者读写执行的权限,给所在组读执行的权限,给其他组读执行的权限:chmod u=rwx,g=rx,o=rx abc

        • 给abc文件的所有者除去执行的权限,增加组写的权限:chmod u-x,g+w abc

        • 给abc文件的所有用户添加读的权限:chmod a+r abc

        • 给abc文件的其他用户添加读写执行的权限:chmod o+r+w+x abc

    • 第二种方式:通过数字变更权限,当变更权限较多时可以采用此方式

      • r = 4
      • w = 2
      • x = 1
      • 语法:chmod 数字 文件/目录 ,因为取值为2的整数次幂,所以不会数字不会有歧义
      • 案例演示
        • 将abc文件权限修改为 rwxr-xr-x :chmod 755 abc

定时任务调度

crond 任务调度(重复执行)

  1. 概述

    • 任务调度:是指系统在某个时执行的特定的命令或程序
    • 任务调度分类
      • 系统工作:有些重要的工作必须周而复始的执行,如病毒扫描等
      • 个别用户工作:个别用户可能希望执行某些程序,比如MySQL数据库备份
    • 本质:系统中运行着一个名为 crond 的守护进程(Daemon),它每分钟会检查一次 /var/spool/cron/用户名 下的任务文件,crontab -e 命令修改的正是这个文件
  2. 基本语法:crontab [选项](Cron(源自希腊语 Chronos 时间) Table)

  3. 常用选项

    • -e(edit):编辑crontab定时任务,一个用户会编辑一个文件
    • -l(list):查询crontab定时任务
    • -r(remove):删除当前用户的所有的crontab任务
    • service crond restart :重启任务调度
  4. 定时任务的格式

    * * * * * command_to_execute(任务可以是shell脚本,也可以是普通的命令)
    -  -  -  -  -
    |  |  |  |  |
    |  |  |  |  +----- 星期几 (0 - 7) (0和7都代表星期天)
    |  |  |  +------- 月份 (1 - 12)
    |  |  +--------- 每月的几号 (1 - 31)
    |  +----------- 小时 (0 - 23)
    +------------- 分钟 (0 - 59)
    分时日月周

    常用符号:

    • *(星号):代表每。如在分钟位写 * 就是每分钟执行任务
    • ,(逗号):代表和。如在星期位写 1,3,5 代表每周一三五执行任务
    • -(横杠):代表范围。如在月位写 1-2 代表每年的1到2月
    • /(斜杠):代表间隔,一般和*连用 */n 代表每隔多久。如在小时位写 */8 代表每隔八小时

    注意:阅读时最好从后往前看;周和日最好不要同时定义,因为它们定义的都是天,很容易引起混乱,如果周和日都同时定义了,那么两者之间是或的关系,如 0 8 1,15 * 1 代表每周一和1号、15号的上午八点执行任务

  5. 案例

    • 每隔1分钟,就将当前的日期信息,追加到 /home/ethan/mydate 文件中: * * * * * cal >> /home/ethan/mydate
    • 每天凌晨2:00将mysql数据库 testdb,备份到文件中:0 2 * * * mysqldump -u root -p密码 testdb > /home/db.bak

at任务调度(一次性)

  1. 基本介绍
    • at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行
    • 默认情况下,atd守护进程会每60秒检查作业队列,有作业时,会检查作业的运行时间,如果时间与当前时间匹配,则运行此作业
    • at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
    • 在使用at命令时,一定要保证atd进程的启动,可以使用相关指令(ps -ef | grep atd)来查看
  2. 基本语法:at [选项] [时间] ,交互模式下Ctrl + D 结束at命令的输入,Ctrl + backspace 退格
  3. 常用选项
    • -l(list):列出当前用户排队中的任务,等同于atq
    • -d(delete):删除指定的任务,等同于atrm
    • -c(cat):查看任务内容
    • -m(mail):当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
    • -f(file):从文件读取任务,不需要进入交互式界面
    • -q(queue):指定队列,at默认将任务放入a队列,可以使用不同字母(a-z,A-Z)来区分任务等级,字母越小,优先级越高,batch命令默认在b队列
    • -t:使用特定格式的时间戳指定任务的执行时间,一般配合date命令来使用。格式 [[CC]YY]MMDDhhmm[.ss]
    • -v(vaguely):显示出任务将要执行的具体时间
    • -V(version):显示版本信息
  4. at指定时间的方法
    • 接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已经过去,那么就在第二天执行。例如:04:00
    • 使用midnight(凌晨零点),noon(中午12点),teatime(下午4点)等比较模糊的词语来指定时间
    • 采用12小时制,在时间后面加上AM(上午),PM(下午)。如12pm
    • 指定具体日期,格式为
      • MM/DD/YY:at 10:00 01/25/26
      • MM/DD/YYYY:at 10:00 01/25/2026
      • DD.MM.YY:at 10:00 25.01.26
      • 时间 月份 日期 [年份]at 08:30 Jan 25 2026 ,月份简写:Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec 均可识别。
    • 相对计时法,语法为 now/具体时间 + count 时间单位 ,时间单位有minutes、hours、days、months、weeks。如 now + 5 days
    • 使用 today tomorrow,如 04:00 tomorrow
  5. 案例
    • 2天后的下午5点执行 /bin/ls /home :at 5pm + 2 days
    • 明天下午五点,输出时间到指定文件内:at 5pm tomorrow
    • 2分钟后,执行指定脚本文件:at now + 2 minutes -f /home/ethan/myshell.sh
    • 删除已经设置的任务:atrm 编号